1
Codice come dati: La natura omoinica di Elixir
AI019Lesson 10
00:00

La natura dell'omoinicità

Linguaggio omoinico: Un linguaggio in cui la rappresentazione interna è espressa nel linguaggio stesso. In Elixir, il codice sorgente non è solo testo; è una struttura dati annidata nota come Albero sintattico astratto (AST).

1. Regole logiche di rappresentazione

Elixir semplifica l'AST rappresentando i valori letterali fondamentali come tali stessi. Atomi, numeri, liste (inclusi elenchi con chiave), stringhe binarie e tuple con due elementi vengono rappresentati internamente senza avvolgimento complesso.

iex> quote do: [do: 1]
[do: 1]
iex> quote do: "binaries"
"binaries"

2. Struttura della tupla dell'AST

La maggior parte delle trasformazioni del codice produce una tupla con tre elementi: {nome_funzione, metadati, argomenti}. Ad esempio, una chiamata di funzione come 1 + 2 diventa {:+, [line: 1], [1, 2]}. Questo permette al linguaggio di trattare Codice come dati.

3. Macro: Ritardo nell'esecuzione

Le macro sono "un modo per ritardare l'esecuzione di clausole inserendo codice nella rappresentazione interna del nostro programma." Mentre le funzioni standard valutano gli argomenti prima di chiamata, le macro ricevono l' AST grezzo, consentendo l'inserimento di logica prima della compilazione.

$$\text{Codice sorgente} \xrightarrow{\text{Quote}} \text{Tupla AST} \xrightarrow{\text{Macro}} \text{AST trasformato}$$

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>